package com.guit.hrms.controller;

import com.guit.hrms.dto.UpdateDTO;
import com.guit.hrms.po.utilsPO.Result;
import com.guit.hrms.service.UpdateService;
import com.guit.hrms.utils.ThreadLocalUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

@Slf4j
@RestController
@RequestMapping("/api")
public class UpdateController {
    @Autowired
    private UpdateService updateService;

    /**
     * 修改个人信息
     * @param updateDTO 要修改的员工信息
     * @return 修改结果
     */
    @PatchMapping("/updateInfo")
    public Result updateInfo(@RequestBody UpdateDTO updateDTO) {
        if (updateDTO.getAge() !=0 || updateDTO.getBirthday() != null ||!updateDTO.getPhoneNumber().isEmpty() || !updateDTO.getEmail().isEmpty()){
            Map<String,Object> map = ThreadLocalUtil.get();
            String employeeId = (String) map.get("employeeId");
            updateDTO.setEmployeeId(employeeId);
            Integer row = updateService.updateInfo(updateDTO);
            if (row!=0){
                return Result.success();
            } else {
                return Result.error();
            }
        } else {
            return Result.error("请输入要修改的内容！");
        }
    }

    /**
     * 管理员修改员工信息
     * @param updateDTO 要修改的员工信息
     * @return 修改结果
     */
    @PatchMapping("/updateProfile")
    public Result updateProfile(@RequestBody UpdateDTO updateDTO) {
        System.out.println(updateDTO.toString());
        if (!updateDTO.getEmployeeId().isEmpty()){
            if ((updateDTO.getDepartment() != null && updateDTO.getDepartment() !=0)
                    || (updateDTO.getPosition() != null && updateDTO.getPosition() != 0)
                    || (updateDTO.getRoleId() != null && updateDTO.getRoleId() != 0)
                    || (updateDTO.getStatus() != null )){
                Map<String,Object> map = ThreadLocalUtil.get();
                String employeeId = (String) map.get("employeeId");
                if (employeeId.equals(updateDTO.getEmployeeId())){
                    return Result.error("不可以修改自己的信息！");
                } else {
                    Integer row = updateService.updateProfile(updateDTO);
                    if (row!=0){
                        return Result.success();
                    } else {
                        return Result.error("没有该员工！");
                    }
                }
            } else {
                return Result.error("请输入要修改的内容！(部门和岗位要改动需和部门类型一起传入)");
            }
        } else {
            return Result.error("请输入要修改信息的员工工号！");
        }
    }

    /**
     * 员工修改密码
     * @param updateDTO 修改前后的密码
     * @return 修改结果
     */
    @PatchMapping("/updatepwd")
    public Result updatePwd(@RequestBody UpdateDTO updateDTO) {
        Map<String,Object> map = ThreadLocalUtil.get();
        String employeeId = (String) map.get("employeeId");
        updateDTO.setEmployeeId(employeeId);
        Integer re = updateService.updatePwd(updateDTO);
        if (re == 0) {
            return Result.error("旧密码不正确");
        }

        return Result.success();
    }

    /**
     * 管理员重置员工密码
     * @param updateDTO 要重置密码的员工工号
     * @return 重置结果
     */
    @PatchMapping("/resetpwd")
    public Result resetPwd(@RequestBody UpdateDTO updateDTO) {
        String employeeId = updateDTO.getEmployeeId();
        String newPassword = updateDTO.getNewPassword();
        Map<String,Object> map = ThreadLocalUtil.get();
        if (employeeId == null || employeeId.isEmpty()) {
            return Result.error("请输入要重置密码的员工工号！");
        } else {
            Integer re = updateService.resetPwd(employeeId,newPassword);
            if (re == 1) {
                return Result.success("重置成功！");
            } else {
                return Result.error("没有该员工！");
            }
        }
    }

    /**
     * 管理员解绑员工微信
     * @param employeeId 要解绑的员工工号
     * @return 解绑结果
     */
    @PatchMapping("/reset/wx")
    public Result resetWx(String employeeId) {
        if (employeeId == null || employeeId.isEmpty()) {
            return Result.error("请输入要重置密码的员工工号！");
        } else {
            Integer r = updateService.resetWx(employeeId);
            if (r == 1) {
                return Result.success("解绑成功！");
            } else {
                return Result.error("没有该员工！");
            }
        }
    }

    /**
     * 管理员新增员工信息
     * @param updateDTO 要新增的员工信息
     * @return 新增结果
     */
    @PostMapping("/addEmployee")
    public Result addEmployee(@RequestBody UpdateDTO updateDTO) {
        Integer flag = updateService.insertInfo(updateDTO);

        if (flag == 2) {
            return Result.error("id重复");
        } else if (flag == 0) {
            return Result.error("请选择职位");
        }

        return Result.success();
    }

    /**
     * 管理员删除员工
     * @param employeeIds 要删除的员工工号
     * @return 删除结果
     */
    @DeleteMapping("/deleteEmployees/{employeeIds}")
    public Result deleteEmployees(@PathVariable List<String> employeeIds) {
        Integer result = updateService.deleteById(employeeIds);
        if (result == 0) {
            return Result.error("删除失败");
        } else {
            return Result.success();
        }
    }
}
